import CZML_Rectangle from "./../entity/CZML_Rectangle.js"
import CZML_Point from "./../entity/CZML_Point.js"
import CZML_CircleOrOval from "./../entity/CZML_CircleOrOval.js"
import CZML_Cuboid from "./../entity/CZML_Cuboid.js"
import CZML_Prism from "./../entity/CZML_Prism.js"
import CZML_OrbitAltitudeLine from "./../entity/CZML_OrbitAltitudeLine.js"
import CZML_Axis from "./../entity/CZML_Axis.js"
import CZML_Polygon from "./../entity/CZML_Polygon.js"
import CZML_Sphere from "./../entity/CZML_Sphere.js"
import CZML_Cylindrical from "./../entity/CZML_Cylindrical.js"
import CZML_CommunicationLink from "./../entity/CZML_CommunicationLink.js"
import CZML_CummunicationArc from "./../entity/CZML_CummunicationArc.js"
import CZML_Line from "../entity/CZML_Line.js"
import CZML_DeleteObjectByID from "./../entity/CZML_DeleteObjectByID.js"
class CZML_PIXEL_CLASS {
    constructor(viewer) {
        this._viewer = viewer
    }


    CZML_PIXEL_AddPoint(id, name, points, fillColor, isFilled, isOutline, outlineColor) {
        const point = new CZML_Point(this._viewer, id, name, points, fillColor, isFilled, isOutline, outlineColor)
    }

    // 添加矩形
    // id：服务化平台给出的UUID，字符串
    // name：矩形名称，可以为空
    // points：矩形两个角点位置[经，纬，经，纬]
    // fillColor：矩形填充颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // isFilled：矩形是否填充，true or false
    // isOutline：矩形是否显示轮廓，true or false
    // outlineColor：矩形轮廓颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // return：<Boolean> 新添加id时返回true，替换存在id时返回false
    CZML_PIXEL_AddRectangle(id, name, points, fillColor, isFilled, isOutline, outlineColor) {
        const rectangle = new CZML_Rectangle(this._viewer, id, name, points, fillColor, isFilled, isOutline, outlineColor)
    }

    // 添加圆或椭圆形
    // id：服务化平台给出的UUID，字符串
    // name：图元名称，可以为空
    // point：圆心位置[经,纬,高]
    // semiMinorAxis：短半轴，单位为米
    // semiMajorAxis：长半轴，单位为米
    // rotation：[double] 图元旋转角度，从北(逆时针)以弧度表示的角度，默认为0.0
    // fillColor：图元填充颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // isFilled：图元是否填充，true or false
    // isOutline：图元是否显示轮廓，true or false
    // outlineColor：图元轮廓颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // return：<Boolean> 新添加id时返回true，替换存在id时返回false
    CZML_PIXEL_AddCircleOrOval(id, name, point, semiMinorAxis, semiMajorAxis, rotation, fillColor, isFilled, isOutline, outlineColor) {
        const CircleOrOval = new CZML_CircleOrOval(this._viewer, id, name, point, semiMinorAxis, semiMajorAxis, rotation, fillColor, isFilled, isOutline, outlineColor)
    }

    // 添加长方体
    // id：服务化平台给出的UUID，字符串
    // name：长方体名称
    // point：长方体体心，[经,纬,高]（[-107.0, 40.0, 300000.0]）
    // dimensions:长方体尺寸，[长,宽,高]，（[400000.0, 300000.0, 500000.0]）
    // fillColor：长方体填充颜色，数组：[R,G,B,255]（[255, 0, 0, 128]）
    // isFilled：是否填充，true or false
    // isOutline：是否显示轮廓，true or false
    // outlineColor：轮廓颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // return：<Boolean> 新添加id时返回true，替换存在id时返回false
    CZML_PIXEL_AddCuboid(id, name, point, dimensions, fillColor, isFilled, isOutline, outlineColor) {
        const Cuboid = new CZML_Cuboid(this._viewer, id, name, point, dimensions, fillColor, isFilled, isOutline, outlineColor)
    }

    // 添加棱柱
    // id：该棱柱唯一id，服务化平台给出的UUID，字符串
    // name：棱柱的名称，字符串
    // DataStartTime：数据开始时刻，字符串，输入格式为UTCG
    // posA,posB,posC,posD：棱柱顶点点位置，数组：[相对秒1,X1,Y1,Z1,相对秒2,X2,Y2,Z2]([0,30,30,30,5,30,30,30])，XYZ为地心地固系下，单位为米
    // number:棱柱数，数组：3、4（目前只做了三棱柱、四棱柱）
    // PrismColor：棱柱的颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // PrismStyle：棱柱的类型：（0实面/1网格）
    // MarkerVisible：name文本是否可见（true/false)
    // height：棱柱高度
    // ReferenceFrame:轨迹姿态的参考系设定，字符串，两种可选（"FIXED" ，"INERTIAL"）默认为"FIXED"
    // return：<Boolean> 新添加id时返回true，替换存在id时返回false
    CZML_PIXEL_AddPrism(id, name, DataStartTime, posA, posB, posC, posD, number, PrismColor, MarkerVisible, height, ReferenceFrame) {
        const Prism = new CZML_Prism(this._viewer, id, name, DataStartTime, posA, posB, posC, posD, number, PrismColor, MarkerVisible, height, ReferenceFrame)
    }

    // 添加场景中的高度线
    // id：该动态线唯一id，服务化平台给出的UUID，字符串
    // DataStartTimeStartPos：起始点数据开始时刻，字符串，输入格式为UTCG
    // DataStartTimeEndPos：终点数据开始时刻，字符串，输入格式为UTCG
    // StartPos:起始点数据，参考ID或数组
    // StartPosType:起始点数据类型，1为参考id，2位数组
    // relSecs:相对时间，当起点为参考点时有效；起点为数组时没有意义任意输入一个值即可。
    // LineWidth：线的宽度，数
    // LineColor：线的颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // LineStyle：线的类型：（0实面/1网格）
    // MarkerVisible：name文本是否可见（true/false)
    // ReferenceFrame:轨迹姿态的参考系设定，字符串，两种可选（"FIXED" ，"INERTIAL"）默认为"FIXED"
    // return：<Boolean> 新添加id时返回true，替换存在id时返回false
    CZML_PIXEL_AddOrbitAltitudeLine(id, DataStartTimeStartPos, DataStartTimeEndPos, StartPos, StartPosType, relSecs, LineWidth, LineColor, LineStyle, MarkerVisible, ReferenceFrame) {
        const OrbitAltitudeLine = new CZML_OrbitAltitudeLine(this._viewer, id, DataStartTimeStartPos, DataStartTimeEndPos, StartPos, StartPosType, relSecs, LineWidth, LineColor, LineStyle, MarkerVisible, ReferenceFrame)
    }

    // 添加场景中的动态坐标轴
    // id：该动态线唯一id，服务化平台给出的UUID，字符串
    // name：三个轴的名称数组，如["X轴", "Y轴", "Z轴"]
    // DataStartTime：数据开始时刻，字符串，输入格式为UTCG
    // idRef：圆心参考ID，为场景中已存在的对象
    // posX：X轴终点位置，数组：[相对秒1,X1,Y1,Z1,相对秒2,X2,Y2,Z2]([0,30,30,30,5,30,30,30])，XYZ为地心地固系下，单位为米
    // posY：Y轴终点位置，数组：[相对秒1,X1,Y1,Z1,相对秒2,X2,Y2,Z2]([0,30,30,30,5,30,30,30])，XYZ为地心地固系下，单位为米
    // posZ：Z轴终点位置，数组：[相对秒1,X1,Y1,Z1,相对秒2,X2,Y2,Z2]([0,30,30,30,5,30,30,30])，XYZ为地心地固系下，单位为米
    // LineWidth：线的宽度（10）
    // LineColor：线的颜色，数组：[R,G,B,255]（[255,0,0,255]）
    // LineStyle：线的类型：（0实线/1虚线/2箭头）
    // MarkerVisible：name文本是否可见（true/false)
    // ReferenceFrame:轨迹姿态的参考系设定，字符串，两种可选（"FIXED" ，"INERTIAL"）默认为"FIXED"
    // return：<Boolean> 新添加id时返回true，替换存在id时返回false
    CZML_PIXEL_AddAxis(id, name, DataStartTime, idRef, posX, posY, posZ, LineWidth, LineColor, LineStyle, MarkerVisible, ReferenceFrame) {
        const Axis = new CZML_Axis(this._viewer, id, name, DataStartTime, idRef, posX, posY, posZ, LineWidth, LineColor, LineStyle, MarkerVisible, ReferenceFrame)
    }

    /// /添加多边形
// id: 服务化平台给出的UUID，字符串
// name：多边形名称，可以为空
// points: 多边形的经纬高数组顺时针或逆时针输入，格式为[经,纬,高,经,纬,高,经,纬,高,...]
// fillColor：多边形填充颜色，数组：[R,G,B,255]（[255,0,0,255]）
// isFilled：多边形是否填充，true or false
// isOutline：多边形是否显示轮廓，true or false
// outlineColor：多边形轮廓颜色，数组：[R,G,B,255]（[255,0,0,255]）
    CZML_PIXEL_AddPolygon(id, name, points, fillcolor, isFilled, isOutline, outlineColor) {
        const polygon = new CZML_Polygon(this._viewer, id, name, points, fillcolor, isFilled, isOutline, outlineColor)
    }

    // 添加球体
// id：服务化平台给出的UUID，字符串
// name：球体名称
// point：球心位置，[经,纬,高]（[-114.0, 40.0, 300000.0]）
// size:球体半径，（[200000.0, 200000.0, 300000.0]）
// fillColor：球体填充颜色，数组：[R,G,B,255]（[255, 0, 0, 128]）
// isFilled：是否填充，true or false
// isOutline：是否显示轮廓，true or false
// outlineColor：轮廓颜色，数组：[R,G,B,255]（[255,0,0,255]）
    CZML_PIXEL_AddSphere(id, name, point, size, fillColor, isFilled, isOutline, outlineColor) {
        const sphere = new CZML_Sphere(this._viewer, id, name, point, size, fillColor, isFilled, isOutline, outlineColor)
    }

    // 添加场景中的棱柱
// id：该棱柱唯一id，服务化平台给出的UUID，字符串
// name：棱柱的名称，字符串
// DataStartTime：数据开始时刻，字符串，输入格式为UTCG
// posA,posB,posC,posD：棱柱顶点点位置，数组：[相对秒1,X1,Y1,Z1,相对秒2,X2,Y2,Z2]([0,30,30,30,5,30,30,30])，XYZ为地心地固系下，单位为米
// number:棱柱数，数组：3、4（目前只做了三棱柱、四棱柱）
// PrismColor：棱柱的颜色，数组：[R,G,B,255]（[255,0,0,255]）
// PrismStyle：棱柱的类型：（0实面/1网格）
// MarkerVisible：name文本是否可见（true/false)
// height：棱柱高度
// ReferenceFrame:轨迹姿态的参考系设定，字符串，两种可选（"FIXED" ，"INERTIAL"）默认为"FIXED"
    CZML_PIXEL_AddCylindrical(id, name, point, length, topRadius, bottomRadius, fillColor, isFilled, isOutline, outlineColor) {
        const cylindrical = new CZML_Cylindrical(this._viewer, id, name, point, length, topRadius, bottomRadius, fillColor, isFilled, isOutline, outlineColor)
    }

    // -----------
    // 添加通信链路
    // idTarget：通信接口目标ID，UUID字符串，比如火箭的ID
    // idBasic：通信接口下行设备ID，UUID字符串，比如地面站的ID
    // vOrbitStartTime：起始时间UTCG数组，字符串
    // vOrbitEndTime：结束时间UTCG数组，字符串
    // return：true 已上图
    CZML_PIXEL_AddCommunicationLink(idTarget, idBasic, vOrbitStartTime, vOrbitEndTime) {
        const CommunicationLink = new CZML_CommunicationLink(this._viewer, idTarget, idBasic, vOrbitStartTime, vOrbitEndTime)
    }

    /**
     *添加空天飞行器显示轨道接口（可能存在多段）
     * @param id <String> 空天飞行器的id，（服务化平台给出的UUID）
     * @param idOther <String> 与空天飞行器通信的另一个对象id数组，为null代表为空白弧度，否则为非空白弧度
     * @param OrbitVisible <Boolean> idRef对应的航天器的轨道是否可见
     * @param OrbitStartTime <Array> 起始时间UTCG数组，与idOther一一对应，字符串
     * @param OrbitEndTime<Array> 结束时间UTCG数组，与idOther一一对应
     * @returns true：已上图
     */
    CZML_PIXEL_AddCummunicationArc(id, idOther, OrbitVisible, OrbitStartTime, OrbitEndTime) {
        const CummunicationArc = new CZML_CummunicationArc(this._viewer, id, idOther, OrbitVisible, OrbitStartTime, OrbitEndTime)
    }

// 根据物体id删除相应的物体
    CZML_PIXEL_DeleteObjectByID(id) {
        const DeleteObject = new CZML_DeleteObjectByID(this._viewer, id)
    }

    // 添加场景中的动态线
// id：该动态线唯一id，服务化平台给出的UUID，字符串
// name：动态线的名称，字符串
// DataStartTimeStartPos：起始点数据开始时刻，字符串，输入格式为UTCG
// DataStartTimeEndPos：终点数据开始时刻，字符串，输入格式为UTCG
// StartPos:起始点数据，参考ID或数组
// StartPosType:起始点数据类型，1为参考id，2位数组
// EndPos:终点数据，参考ID或数组
// EndPosType:终点数据类型，1为参考id，2位数组
// LineWidth：线的宽度，数
// LineColor：线的颜色，数组：[R,G,B,255]（[255,0,0,255]）
// LineStyle：线的类型：（0实面/1网格）
// MarkerVisible：name文本是否可见（true/false)
// ReferenceFrame:轨迹姿态的参考系设定，字符串，两种可选（"FIXED" ，"INERTIAL"）默认为"FIXED"
// HEU_AddLine("123","345","29 Nov 2017 22:44:11.000", "29 Nov 2017 23:24:11.000",[10,10,10],2,[40,50,60],2,10,[0,255,255,255], 0, true,"FIXED");
    CZML_PIXEL_AddLine(id, name, DataStartTimeStartPos, DataStartTimeEndPos, StartPos, StartPosType, EndPos, EndPosType, LineWidth, LineColor, LineStyle, MarkerVisible, ReferenceFrame) {
        const line = new CZML_Line(this._viewer, id, name, DataStartTimeStartPos, DataStartTimeEndPos, StartPos, StartPosType, EndPos, EndPosType, LineWidth, LineColor, LineStyle, MarkerVisible, ReferenceFrame)
    }
}
export default CZML_PIXEL_CLASS
